﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Quaack
{
    public partial class WijzigProfiel : System.Web.UI.Page
    {
        /*tempblocked: een gebruiker is al dan niet door de admin geblokkeerd maar kan nog reageren binnen twee weken na blokkade
        permblocked: na twee weken word een gebruiker permanent geblokkeerd (is verwijderd in usecase 16)*/

        /*removed: een gebruiker kan zijn eigen profiel verwijderen (usecase 3)*/
        
        protected void page_preinit()
        {
            if (User.Identity.IsAuthenticated) Page.MasterPageFile = "~/Site-Ingelogd.Master";
            else
            {
                Page.MasterPageFile = "~/Site.Master";
                string url;
                url = "~/default.aspx";
                Response.Redirect(url);
            }
        }

        protected void ClkAnnuleerWijzigProfiel(object sender, EventArgs e)
        {
            Server.Transfer("WijzigProfiel.aspx");
        }

        /*   geef melding op website dat een e-mail is aangemaakt   */
        protected void Page_Load(object sender, EventArgs e)
        {
            if (User.Identity.IsAuthenticated)
            {
                String user = User.Identity.Name;
                int userID = 0;
                SqlConnection sqlConn = new SqlConnection(
                "Data Source=.\\sqlexpress;Initial Catalog=Quaack;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");

                /*   Profileid opvragen van de ingelogde gebruiker   */
                SqlCommand GetUserID = new SqlCommand("SELECT profileid from profile where username = '" + user + "'", sqlConn);

                /*   open database, haal de userID op en sluit database   */
                sqlConn.Open();
                object sqlObject = GetUserID.ExecuteScalar();
                if (sqlObject != null)
                {
                    // userID zal uiteindelijk gebruikt worden om de sender aan te geven in de message tabel
                    userID = Convert.ToInt32(sqlObject.ToString());
                }
                sqlConn.Close();
                SqlDataSource1.SelectCommand = "SELECT password, profile, email, avatarlocation, mobilenumber, administrator FROM profile WHERE profileid = " + userID + "";
                LblNietIngelogd.Text = "";

                bool admini = false;
                /*   Profileid opvragen van de ingelogde gebruiker   */
                SqlCommand GetAdmin = new SqlCommand("SELECT administrator from profile where username = '" + user + "'", sqlConn);

                /*   open database, haal de userID op en sluit database   */
                sqlConn.Open();
                object admin = GetAdmin.ExecuteScalar();
                admini = Convert.ToBoolean(admin);
                sqlConn.Close();
                if (Convert.ToBoolean(admini) == true) /*Knoppen die alleen admin mag zien worden zichtbaar*/
                {
                    BtnVerwijderProfiel.Visible = true;
                    BtnVerwijderMijnProfiel.Visible = false;
                    BtnHerstelProfiel.Visible = true;
                    DDLGebruikers.Visible = true;
                }
                else /*Knoppen die alleen admin mag zien worden onzichtbaar voor gebruiker*/
                {
                    DDLGebruikers.Visible = false;
                    BtnVerwijderProfiel.Visible = false;
                    BtnVerwijderMijnProfiel.Visible = true;
                    BtnHerstelProfiel.Visible = false;
                }
            }

            else
            {
                String user = User.Identity.Name;
                int userID = 0;
                SqlConnection sqlConn = new SqlConnection(
                "Data Source=.\\sqlexpress;Initial Catalog=Quaack;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");

                /*   Profileid opvragen van de ingelogde gebruiker   */
                SqlCommand GetUserID = new SqlCommand("SELECT profileid from profile where username = '" + user + "'", sqlConn);

                /*   open database, haal de userID op en sluit database   */
                sqlConn.Open();
                object sqlObject = GetUserID.ExecuteScalar();
                if (sqlObject != null)
                {
                    // userID zal uiteindelijk gebruikt worden om de sender aan te geven in de message tabel
                    userID = Convert.ToInt32(sqlObject.ToString());
                }
                sqlConn.Close();
                SqlDataSource1.SelectCommand = "SELECT password, profile, email, avatarlocation, mobilenumber FROM profile WHERE profileid = " + userID + "";
                LblNietIngelogd.Text = "U bent niet ingelogd. Profielgegevens kunnen niet getoond worden.";
                Response.AddHeader("refresh", "3; URL=Default.aspx");
            }
        }

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            FuUpdateAvatar.Visible = true;
            LblAvatar.Visible = true;
        }

        public void Gridview1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            FuUpdateAvatar.Visible = true;
            String PasswordNew = Convert.ToString(e.NewValues[0]);
            String ProfileNew = Convert.ToString(e.NewValues[1]);
            String EmailNew = Convert.ToString(e.NewValues[2]);
            String MobileNew = Convert.ToString(e.NewValues[3]);

            if (PasswordNew.Length < 8 | PasswordNew.Length > 16)
            {
                LblNietIngelogd.Text = "Het wachtwoord moet uit minimaal 8 en maximaal 16 tekens bestaan.";
                e.Cancel = true;
                return;
            }

            if (EmailNew == "")
            {
                LblNietIngelogd.Text = "U moet een geldig e-mailadres invullen.";
                e.Cancel = true;
                return;
            }

            if (MobileNew == "          ")
            {
                MobileNew = "o";
            }

            if (ProfileNew == "")
            {
                ProfileNew = "o";
            }

            {
                if (User.Identity.IsAuthenticated)
                {
                    String user = User.Identity.Name;
                    int userID = 0;
                    SqlConnection sqlConn = new SqlConnection(
                    "Data Source=.\\sqlexpress;Initial Catalog=Quaack;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");
                    /*   Profileid opvragen van de ingelogde gebruiker   */
                    SqlCommand GetUserID = new SqlCommand("SELECT profileid from profile where username = '" + user + "'", sqlConn);
                    sqlConn.Open();
                    object sqlObject = GetUserID.ExecuteScalar();
                    if (sqlObject != null)
                    {
                        userID = Convert.ToInt32(sqlObject.ToString());
                    }
                    sqlConn.Close();

                    DateTime now = DateTime.Now;
                    TimeSpan time = new TimeSpan(0, 0, 10, 0);
                    DateTime endverificationpending = now.Add(time);
                    Session.Add("EindeVerificatieTijd", endverificationpending);

                    /* upload met plaatje   */
                    if (FuUpdateAvatar.HasFile)
                    {
                        SqlCommand SetTimeVerfication = new SqlCommand("UPDATE profile SET verficationpendingdatetime = @verficationpendingdatetime where username = '" + user + "'", sqlConn);
                        SetTimeVerfication.Parameters.AddWithValue("@verficationpendingdatetime", endverificationpending);
                        sqlConn.Open();
                        SetTimeVerfication.ExecuteNonQuery();
                        sqlConn.Close();
                        string Avatar = FuUpdateAvatar.PostedFile.FileName;
                        FuUpdateAvatar.SaveAs(Server.MapPath("images/" + Avatar));
                        String AvatarlocationNew = "images/" + Avatar;
                        string id = Convert.ToString(userID);
                        string title = "Bevestig uw wijzigingen.";
                        string body = "Klik op de volgende link: http://www.quaack.nl/bevestigen.aspx?id=" + id + "&email=" + EmailNew + "&profile=" + ProfileNew + "&password=" + PasswordNew + "&mobile=" + MobileNew + "&avatar=" + AvatarlocationNew + " ";
                        Email ActiveerProfiel = new Email();
                        ActiveerProfiel.SendMail(EmailNew, title, body);
                        e.Cancel = true;
                        LblNietIngelogd.Text = "Er is een bevestigingsmail gestuurd naar uw emailadres";
                        Response.AddHeader("refresh", "3; URL=Default.aspx");
                    }
                    else
                    {
                        SqlCommand SetTimeVerfication = new SqlCommand("UPDATE profile SET verficationpendingdatetime = @verficationpendingdatetime where username = '" + user + "'", sqlConn);
                        SetTimeVerfication.Parameters.AddWithValue("@verficationpendingdatetime", endverificationpending);
                        sqlConn.Open();
                        SetTimeVerfication.ExecuteNonQuery();
                        sqlConn.Close();
                        String AvatarlocationNew = "leeg";
                        string id = Convert.ToString(userID);
                        string title = "Bevestig uw wijzigingen.";
                        string body = "Klik op de volgende link: http://www.quaack.nl/bevestigen.aspx?id=" + id + "&email=" + EmailNew + "&profile=" + ProfileNew + "&password=" + PasswordNew + "&mobile=" + MobileNew + "&avatar=" + AvatarlocationNew + " ";
                        Email ActiveerProfiel = new Email();
                        ActiveerProfiel.SendMail(EmailNew, title, body);
                        e.Cancel = true;
                        LblNietIngelogd.Text = "Er is een bevestigingsmail gestuurd naar uw emailadres";
                        Response.AddHeader("refresh", "3; URL=Default.aspx");
                    }
                }
            }
        }

        protected void ClkBtnVerwijderProfiel(object sender, EventArgs e)
        {
            DateTime now = DateTime.Now;
            TimeSpan time = new TimeSpan(14, 0, 0, 0);
            DateTime endtempblocked = now.Add(time);
            String Gebruiker = DDLGebruikers.SelectedValue;
            SqlConnection sqlConn = new SqlConnection(
                "Data Source=.\\sqlexpress;Initial Catalog=Quaack;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");

            /*   Profileid opvragen van de ingelogde gebruiker   */
            SqlCommand DeleteGebruiker = new SqlCommand("UPDATE profile SET tempblocked = @tempblocked, tempblockeddatetime = @tempblockeddatetime where username = '" + Gebruiker + "'", sqlConn);
            DeleteGebruiker.Parameters.AddWithValue("@tempblocked", "True");
            DeleteGebruiker.Parameters.AddWithValue("@tempblockeddatetime", endtempblocked);
            sqlConn.Open();
            DeleteGebruiker.ExecuteNonQuery();
            sqlConn.Close();
            String user = User.Identity.Name;
            String emailadres = "";
            SqlCommand BepaalId = new SqlCommand("Select email from profile where username = '" + Gebruiker + "'", sqlConn);
            sqlConn.Open();
            object sqlObjectemail = BepaalId.ExecuteScalar();
            sqlConn.Close();
            emailadres = Convert.ToString(sqlObjectemail.ToString());
            string title = "Je profiel is verwijderd.";
            string body = "Je profiel is verwijderd. Neem contact op met de systeembeheerder (" + user + "@Quaack.nl" + Environment.NewLine + "met vriendelijke groet," + Environment.NewLine + "Het Quaack team";
            Email ActiveerProfiel = new Email();
            ActiveerProfiel.SendMail(emailadres, title, body);
            LblNietIngelogd.Text = "Er is een bevestigingsmail gestuurd naar betreffende gebruiker";
            Response.AddHeader("refresh", "3; URL=WijzigProfiel.aspx");
        }

        protected void ClkVerwijderMijnProfiel(object sender, EventArgs e)
        {
            if (User.Identity.IsAuthenticated)
            {
                String user = User.Identity.Name;
                int userID = 0;
                SqlConnection sqlConn = new SqlConnection(
                "Data Source=.\\sqlexpress;Initial Catalog=Quaack;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");

                /*   Profileid opvragen van de ingelogde gebruiker   */
                SqlCommand GetUserID = new SqlCommand("SELECT profileid from profile where username = '" + user + "'", sqlConn);

                /*   open database, haal de userID op en sluit database   */
                sqlConn.Open();
                object sqlObject = GetUserID.ExecuteScalar();
                if (sqlObject != null)
                {
                    // userID zal uiteindelijk gebruikt worden om de sender aan te geven in de message tabel
                    userID = Convert.ToInt32(sqlObject.ToString());
                }
                sqlConn.Close();
                DateTime Removed = DateTime.Now;
                SqlCommand VerwijderMijnProfiel = new SqlCommand("UPDATE [Profile] SET [removed] = 1, [removeddatetime] = @removeddatetime WHERE profileID = " + userID + "", sqlConn);
                VerwijderMijnProfiel.Parameters.AddWithValue("@removeddatetime", Removed);
                sqlConn.Open();
                VerwijderMijnProfiel.ExecuteNonQuery();
                sqlConn.Close();
                String emailadres = "";
                SqlCommand BepaalId = new SqlCommand("Select email from profile where profileid = '" + userID + "'", sqlConn);
                sqlConn.Open();
                object sqlObjectemail = BepaalId.ExecuteScalar();
                sqlConn.Close();
                emailadres = Convert.ToString(sqlObjectemail.ToString());
                string title = "Je hebt je profiel verwijderd.";
                string body = "Je profiel is succesvol verwijderd. Je berichten blijven zichtbaar." + Environment.NewLine + "met vriendelijke groet," + Environment.NewLine + "Het Quaack team";
                Email ActiveerProfiel = new Email();
                ActiveerProfiel.SendMail(emailadres, title, body);
                LblNietIngelogd.Text = "Er is een bevestigingsmail gestuurd naar uw emailadres";
                Response.AddHeader("refresh", "3; URL=Default.aspx");
            }
        }

        protected void ClkBtnHerstelProfiel(object sender, EventArgs e)
        {
            String Gebruiker = DDLGebruikers.SelectedValue;
            SqlConnection sqlConn = new SqlConnection(
                "Data Source=.\\sqlexpress;Initial Catalog=Quaack;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");

            /*   Profileid opvragen van de ingelogde gebruiker   */
            SqlCommand DeleteGebruiker = new SqlCommand("UPDATE profile SET removed = @removed, removeddatetime = @removeddatetime where username = '" + Gebruiker + "'", sqlConn);
            DeleteGebruiker.Parameters.AddWithValue("@removed", "False");
            DeleteGebruiker.Parameters.AddWithValue("@removeddatetime", null);
            sqlConn.Open();
            DeleteGebruiker.ExecuteNonQuery();
            sqlConn.Close();
            String user = User.Identity.Name;
            String emailadres = "";
            SqlCommand BepaalId = new SqlCommand("Select email from profile where username = '" + Gebruiker + "'", sqlConn);
            sqlConn.Open();
            object sqlObjectemail = BepaalId.ExecuteScalar();
            sqlConn.Close();
            emailadres = Convert.ToString(sqlObjectemail.ToString());
            string title = "Je profiel is verwijderd.";
            string body = "Je profiel is hersteld."+ Environment.NewLine + "met vriendelijke groet," + Environment.NewLine + "Het Quaack team";
            Email ActiveerProfiel = new Email();
            ActiveerProfiel.SendMail(emailadres, title, body);
            LblNietIngelogd.Text = "Er is een bevestigingsmail gestuurd naar het emailadres van de gebruiker.";
            Response.AddHeader("refresh", "3; URL=WijzigProfiel.aspx");
        }

        protected void ClkBtnEigenPagina(object sender, EventArgs e)
        {
            LblNietIngelogd.Text = "U wordt doorgestuurd naar uw eigen pagina.";
            Response.AddHeader("refresh", "3; URL=EigenPagina.aspx");
        }
    }
}



